use std::fmt::{Debug, Display};

fn main() {
    println!("Hello, world!");
}

pub trait TTT1 {
    fn test1(&self);
}
pub trait TTT2 {
}

pub trait ToSex {
    fn to_six(&self);
}

pub struct AA {

}

impl TTT1 for AA {
    fn test1(&self) {
        
    }
}

pub struct BB<TTT2> {
    pub aa: TTT2
}

fn test1<T, U>(a: &T, b: &U) -> i32 where T: TTT1  + Display, U: TTT2 + Debug {
    12
}

// blanket 实现
impl<T: TTT1> ToSex for T {
    fn to_six(&self) {
        self.test1();
        "".to_string();
    }
}

// ToString 这个 trait 未定义在本包中，所以这里报错。 T 必须是一个本地定义的类型，而不是外部 crate 的类型，但我们这里T当了泛型，就无法确定T具体指向本地还是外部 crate
impl<T: TTT1> ToString for T {
    fn to_string(&self) -> String {
        "".to_string()
    }
}
